package com.stream;

import java.util.stream.Stream;

public class Stream筛选和切片 {
	public static void main(String[] args) {
		/**
		 * Stream.iterate(0, t -> t +2)
		 * 第一个参数为初始元素
		 * 第二个元素为计算函数，以第一个参数为入参计算第二个元素，然后使用第二个元素为入参计算第三个元素等
		 */
		Stream<Integer> stream1 = Stream.iterate(2, t -> t + 3).limit(12);
		System.out.println(stream1.count());
		
		/**
		 * Stream.iterate(0, t -> t < 10, t -> t +2)
		 * 第二个参数为计算函数，如果计算结果为true表示继续生成新的元素，否则就停止
		 */
		Stream<Integer> stream2 = Stream.iterate(3, t -> t < 30, t -> t + 2);
		
		/**
		 * filter接收lambda，从流中排除某些元素
		 */
		Stream<Integer> stream3 = stream2.filter(value -> value > 5);
		
		/**
		 * distinct() 通过hashcode和equals去除重复元素
		 */
		Stream<Integer> stream4 = stream3.distinct();
		
		/**
		 * limit(size)截断流，使其元素个数不超过给定数量
		 */
		Stream<Integer> stream5 = stream4.limit(40);
		
		/**
		 * skip(size)跳过流的前size个元素，如果流中的元素一共没有size个，则返回一个空流，和limit互补
		 */
		System.out.println("stream5count:" + stream5);
		Stream<Integer> stream6 = stream5.skip(1);
		
		System.out.println("stream6count:" + stream6.count());
	}
}
